讓我們進入到最後階段,開始學習如何部屬 Discord BOT 吧!
今天的標題比較聳動。
原本照預期規劃是要介紹三個可以免費部屬 Discord BOT 的平台:
殊不知,Replit 後來有改版,導致它現在很難免費部屬了,所以才說是 Replit 美好的過去。也因此,今天的內容只好改成討論部屬的觀念,以及為什麼 Replit 改版後就不能免費部屬了。(也因此,塗個橘色表示這個沒有照預期的進度 QQ)
想必大家應該有發現,Discord BOT 只有在執行程式時才會上線 (也才會有反應),一旦把程式關閉,Discord BOT 就會立刻下線。換句話說,如果希望 Discord BOT 可以 24 小時隨時隨地的為大家服務的話,就必須要找一台電腦持續地執行程式才行。而這個「找一台電腦去持續執行程式」的動作,就是所謂的「部屬」。
基本上,部屬在任何一台電腦上都可以,只要它能夠長時間不關機並且有足夠的能力去執行 Discord BOT 程式就好。但是,並非人人家裡都有多餘且能夠 24 小時不關機的電腦,因此,另外找一個可以執行程式的電腦就很重要。此時,雲端平台就會是一個好選擇。
不論是租用一個雲端主機還是使用雲端服務,都可以省去很多麻煩。大家不必真的花一筆錢去買實體主機,也不用煩惱要放在哪裡,更不用找人來幫忙管理主機。但是,取而代之的是,雲端平台會有收費機制,畢竟沒人會想做賠本生意嘛!
不過,好在有些平台都有一定的免費額度或免費的服務,對於小型的 Discord BOT 來說綽綽有餘,非常建議大家先挑一個平台部屬看看。如果未來真的事業越做越大,可以再來慢慢考慮要不要花點錢提升規格。
在部屬時,有幾點需要注意:
平時在自己電腦上開發時,帳號、密碼、金鑰等比較敏感的資訊要怎麼放在程式碼中其實沒那麼重要。但是,一旦這個專案會被公開在網路上時,就不能這麼隨意了。尤其是像 Github 這類的程式碼平台,連 Git 紀錄也會一併上傳,只要這些機敏資訊曾經出現在網路上,都有可能被別人翻出來。而部屬時也是一樣,這些機敏資訊也不該放在公開的地方。
但是,難免會有需要在程式碼中設定機敏資訊的需求 (例如:執行 Discord BOT 就需要帶入 Token),此時,環境變數就是很好的工具。透過使用線上平台的 secrets 功能 (幾乎都有),就可以在公開的專案中設定這些不公開的機敏資訊到環境變數中,之後只要在程式碼中進行讀取就好。
以 Python 為例,只要使用
token = os.getenv("TOKEN")
就可以把環境變數中的 TOKEN,傳送到程式碼中的 token 了。
再來就是費用了,手頭寬裕的人選項自然很多,但如果是希望找免費資源的人,請記得一定要看清楚免費額度與條件。而且,這個規則有可能在未來發生變化 (就像當年的 Heroku ...),所以還是要多加注意!
通常在 side project 類型的小專案,硬體規格都不用太高,免費方案下的規格都很夠用。但如果之後事業越做越大,在挑選平台的時候就要記得把規格納入考量。
接下來,來聊聊 Replit 這個曾經非常適合部屬 Discord BOT 的平台。
Replit 是一個程式線上開發平台,它支援超過 50 種程式語言,使用者不用安裝任何軟體就可以直接在瀏覽器上直接編寫、執行、分享程式碼,甚至也支援協作功能。Replit 對於遠端合作或是教學來說都是一個很棒的選擇。
前面有說過,它以前適合免費部屬 Discord BOT,但改版後的現在就不適合了。在解釋之前,要先說明一下原本的機制。
Replit 作為一個線上程式開發平台,運算資源的有效分配是一個很重要的議題。每個使用者啟動程式的時候就需要分配資源給它,反之,一旦使用者不再使用時就要把資源收回來。如果使用者執行程式到一半就把網頁關掉,一樣也會把資源給收回來。
所以,如果只是單純的把 Discord BOT 程式直接放上 Replit 平台執行,它雖然可以正常運作,但也逃不掉「關閉網頁就會停止執行」的命運,就算是之前的版本也是。
換個角度思考,如果可以一直讓 Replit 認為正在使用這個程式的話,就能夠一直持有運算資源,Discord BOT 就可以一直在線了。所以,問題就變成:
要做到這件事,核心思路如下:
這部分的教學蠻多的,這邊列舉幾個,有興趣的人可以參考:
確切的細節我不清楚,但目前測試下來的感覺是,現在的 Replit 會去檢查是否還有人在 Replit 專案的網頁上,一但發現沒有,後端 server 部屬的網址就會失效。也就是說,單靠一個 UptimeRobot 已經無法滿足需求,還需要有另一個工具可以一直開著專案。
不過,如果我可以一直開著專案,那我還要 UptimeRobot 幹嘛XD
所以,總歸一句話就是,Replit 已經不適合免費仔 (就是我) 部屬 Discord BOT 了。
雖然 Replit 已經不再是合適的選項,但是這個思路其實挺讚的,可以找別的地方繼續沿用。因此,只要找一個可以免費部屬後端 server 的平台就好啦!
而 Render,就是一個很好的選擇。
不過,礙於篇幅考量,Render 就留到明天再繼續介紹,不然今天這篇內容會太長。
今天簡單說明了部屬的必要性,以及需要注意的事項,實際部屬的部分明天再繼續。